package services

import (
	"encoding/json"
	"fmt"

	"github.com/sirupsen/logrus"
)

// 153	weekSwitch	//	星期开关     1字节8个位，1~7位分别代表星期一到星期日
// 154	cycleStartTime1	//	循环开启时间1   小时（1字节）
// 155		//	循环开启时间1   分钟（1字节）
// 156	cycleEndTime1	//	循环关闭时间1   小时（1字节）
// 157		//	循环关闭时间1   分钟（1字节）
// 158	duration1	//	开启时长1    小时（1字节）
// 159		//	开启时长1    分钟（1字节）
// 160		//	开启时长1    秒（1字节）
// 161	interval1	//	间隔时长1    小时（1字节）
// 162		//	间隔时长1    分钟（1字节）
// 163		//	间隔时长1    秒（1字节）
// 164	fanMode1	//	风扇模式1    0 正常  1动感模式  2 跟随外界
// 165	fanSpeed1	//	风扇速度1   0~100%
// 166	scheduledStartTime1	//	定时开启时间1   小时（1字节）
// 167		//	定时开启时间1   分钟（1字节）
// 168	scheduledDuration1	//	定时开启时长1    分钟（1字节）
// 169		//	定时开启时长1    秒（1字节）
// 170	scheduledStartTime2	//	定时开启时间2   小时（1字节）
// 171		//	定时开启时间2  分钟（1字节）
// 172	scheduledDuration2	//	定时开启时长2    分钟（1字节）
// 173		//	定时开启时长2    秒（1字节）
// 174	weekSwitch1	//	星期开关     1字节8个位，1~7位分别代表星期一到星期日
// 175	mistCycleRefillTime	//	雾化循环补水时间 分钟
// 176	humidityLowerLimit	//	湿度模式下限
// 177	humidityUpperLimit	//	湿度模式上限
// 178	autoModeSwitch	//	自动模式开关
// 179	fanControlRegister	//	风扇控制寄存器
// 180	coolingMode	//	降温模式
// 181	postSprayVentDuration	//	喷淋停止后通风   分钟
// ParseFanAndMistCtrlData 解析风扇和雾化控制器的数据
func (d *DeviceData) ParseFanCtrlTData() error {
	if len(d.RegisterData) < 29 {
		return fmt.Errorf("payload:%v data length is invalid", d.RegisterData)
	}

	params := FanCtrlTParams{
		WeekSwitch:            d.RegisterData[0],
		CycleStartTime1:       fmt.Sprintf("%d|%d", d.RegisterData[1], d.RegisterData[2]),
		CycleEndTime1:         fmt.Sprintf("%d|%d", d.RegisterData[3], d.RegisterData[4]),
		Duration1:             fmt.Sprintf("%d|%d|%d", d.RegisterData[5], d.RegisterData[6], d.RegisterData[7]),
		Interval1:             fmt.Sprintf("%d|%d|%d", d.RegisterData[8], d.RegisterData[9], d.RegisterData[10]),
		FanMode1:              d.RegisterData[11],
		FanSpeed1:             d.RegisterData[12],
		ScheduledStartTime1:   fmt.Sprintf("%d|%d", d.RegisterData[13], d.RegisterData[14]),
		ScheduledDuration1:    fmt.Sprintf("%d|%d", d.RegisterData[15], d.RegisterData[16]),
		ScheduledStartTime2:   fmt.Sprintf("%d|%d", d.RegisterData[17], d.RegisterData[18]),
		ScheduledDuration2:    fmt.Sprintf("%d|%d", d.RegisterData[19], d.RegisterData[20]),
		MistCycleRefillTime:   d.RegisterData[22],
		HumidityLowerLimit:    d.RegisterData[23],
		HumidityUpperLimit:    d.RegisterData[24],
		AutoModeSwitch:        d.RegisterData[25],
		FanControlRegister:    d.RegisterData[26],
		CoolingMode:           d.RegisterData[27],
		PostSprayVentDuration: d.RegisterData[28],
	}

	event := FanCtrlTEvent{
		Method: PayloadTypeMap[153],
		Params: params,
	}

	logrus.Info("FanAndMistEvent:", event)
	payload, err := json.Marshal(event)
	if err != nil {
		return err
	}

	// 发送数据到平台
	err = PublishEvent(d.Mac, payload)
	if err != nil {
		return err
	}

	return nil
}
